﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<assert.h>
#include<stdio.h>
//char* My_strcopy(char* dest,const char* src)
//{                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
//	char* ret = dest;
//	assert(dest != NULL);
//	assert(src!=NULL);
//	while(*dest++ = *src++);
//	return ret;
//}


//char* My_strncpy(char* dest, const char* src, int num)
//{
//	char* tmp = dest;
//	while (num && (*dest++ = *src++))
//		num--;
//	if (num)
//		while (num--)
//			*dest++ = '\0';
//	return tmp;
//}
//int main()
//{
//	int num = 0;
//	char arr1[10] = { '\0' };
//	char arr2[10] = { '\0' };
//	printf("input?the?dest:>\n");
//	gets(arr1);
//	printf("input?the?scr:>\n");
//	gets(arr2);
//	printf("input?the?copy?num:>");
//	scanf("%d", &num);
//	char* ret = My_strncpy(arr1, arr2, num);
//	printf("%s\n", ret);
//}


//#include <stdio.h>
//#include <stdlib.h>
//#include <assert.h>
//char * my_strcat(char * dest, const char * src)
//{
//	assert(dest);
//	assert(src);
//	char * ret = dest;
//	while (*dest)
//		dest++;
//	while (*dest++ = *src++)
//		;
//	return ret;
//}
//int main()
//{
//	char a[20] = "abcd";
//	char b[5] = "efgh";
//	my_strcat(a, b);
//	printf("%s\n", a);
//	system("pause");
//	return 0;
//}



//#include <stdio.h>
//#include <stdlib.h>
//#include <assert.h>
//char* my_strncat(char* dest, const char* src, size_t count)
//{
//    assert(dest);
//    assert(src);
//    char* ret = dest;
//    while (*dest)
//        dest++;
//    while (count--)
//    {
//        if (*src)
//            *dest++ = *src++;
//        else
//            break;
//    }
//    *dest = '\0';
//    return ret;
//}
//int main()
//{
//    char a[20] = "abc";
//    char b[5] = "efgh";
//    my_strncat(a, b, 3);
//    printf("%s\n", a);
//    system("pause");
//    return 0;
//}


//// 第一个大于第二个 返回大于0的数字 
//// 第一个等于第二个 返回等于0的数字 
//// 第一个小于第二个 返回小于0的数字 
//// 模拟实现 
//int My_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//			return 0;
//		str1++;
//		str2++;
//	}
//	return (*str1 - *str2);
//}
//
//int main()
//{
//	int ret = 0;
//	char str1[10] = "dijshdf";
//	char str2[10] = "fuhdsud";
//	ret=My_strcmp(str1, str2);
//	printf("%d\n", ret);
//	return 0;
//}


char* My_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;
	while (*p)
	{
		s1 = p;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)p;
		}
		p++;
	}
	return NULL;
}

int main()
{
	

		char arr1[] = "hello橘子真甜~";
	char arr2[] = "hello橘子";
	char* ret = My_strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("子串不存在\n");
	}
	else 
	{
		printf("字串存在：%s\n", ret);
	}

	return 0;
}